package shoppingmall.manage.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import shoppingmall.manage.pojo.AdminUser;
import shoppingmall.manage.dto.Result;
import shoppingmall.manage.service.AdministratorService;

import java.util.List;

@Slf4j
@RestController
public class AdminUserController {

    @Autowired
    private AdministratorService administratorService;

    /**
     * 查询后台管所有管理员的数据
     * @return
     */
    @GetMapping("/manage/adminUsers")
    public Result getAllUsers () {
        log.info("查询所有后台管理员:");

        //查询数据库后台管理员表的所有数据
        List<AdminUser> allAdminUser = administratorService.getAllAdminUser();

        //判断查询的结果
        if(allAdminUser.size() > 0){
            //查询到数据
            return Result.success(allAdminUser);
        }

        return Result.error("未查询到数据");
    }

    /**
     * 根据用户名查询当前的管理员信息
     */
    @GetMapping("/manage/adminUser")
    public Result getUserInfoByUsername (@RequestParam String username) {
        log.info("查询管理员信息:{}",username);
        //调用服务层方法进行处理请求
        AdminUser userInfo = administratorService.getAdminUserInfoByUsername(username);

        if(userInfo != null){
            //将结果返回
            return Result.success(userInfo);
        }
        return Result.error("用户不存在");
    }

    /**
     * 根据用户id修改当前的管理员信息
     */
    @PutMapping("/manage/adminUser")
    public Result updateUserInfoByUsername (@RequestBody AdminUser adminUser){
        //输出系统日志
        log.info("更新管理员用户信息,id为:{}",adminUser.getId());

        //检查修改的用户,系统用户admin的用户名不能修改
        if(adminUser.getId() == 1 && adminUser.getUsername() != "admin"){
            //系统用户名不能修改
            return Result.error("系统用户名不能修改!");
        }

        //调用服务层处理方法
        boolean isUpdate = administratorService.updateAdminUserById(adminUser);
        if(isUpdate){
            //更新成功
            return Result.success();
        }
        return Result.error("管理员用户信息修改失败");
    }

    /**
     * 添加管理员用户
     */
    @PostMapping("/manage/adminUser")
    public Result addAdminUser (@RequestBody AdminUser adminUser) {
        log.info("新增管理员:{}",adminUser);
        //调用server层方法，添加管理员
        boolean isInsert =  administratorService.saveAdminUser (adminUser);
        if(isInsert){
            return  Result.success("管理员用户添加成功");
        }
        return Result.error("管理员用户添加失败,请检查是否和已注册管理员用户名重复");
    }

    /**
     * 根据用户名列表批量删除管理员用户
     */
    @DeleteMapping("/manage/adminUser")
    public Result deleteAdminUsersByUsername (@RequestBody List<String> usernameList) {
        log.info("单个或批量删除管理员用户-usernames:{}",usernameList);
        //对要删除的用户名列表进行检查，不能删除系统管理员admin
        for(String username : usernameList){
            if(username.equals("admin")){
                return Result.error("系统管理员，不能删除!");
            }
        }
        //调用server层方法进行处理
        boolean isDelete = administratorService.deleteAdminUsers(usernameList);
        //返回结果
        if(isDelete){
            return Result.success();
        }
        return Result.error("删除失败，请检查参数!");
    }
}
